package com.ymm.lulutong.domain.utils;

import lombok.extern.slf4j.Slf4j;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Description: 信息校验工具类
 * @author: Xuecheng Li
 * @CreateTime: 2022-08-03 20:46
 * @Version: 1.0.0
 */
@Slf4j
public class FormatUtils {

    static Pattern p = Pattern.compile("[~`#$%^&*!@.,()\\\\{}|:;?<>]");

    /**
     * @param phone 手机号
     * @return boolean：手机号格式是否正确
     * @Description 校验手机号格式
     * 大陆手机号码11位数，匹配格式：前三位固定格式+后8位任意数
     * 此方法中前三位格式有：
     * 13+任意数
     * 15+除4的任意数
     * 18+任意数
     * 17+除9的任意数
     * 147
     */
    public static boolean checkPhoneNumberFormat(String phone) {

        if (phone == null) {
            log.error("输入号码为null");
            return false;
        }

        String regExp = "^((13[0-9])|(15[^4])|(18[0-9])|(17[0-8])|(147))\\d{8}$";
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(phone);
        return m.matches();
    }


    /**
     * @return boolean
     * @Description 校验密码格式；数字加字母，不超过20个字符
     * @Param [password]：密码
     **/
    public static boolean checkPasswordFormat(String password) {

        if (password == null || password.length() == 0) {
            return false;
        }

//        boolean containsDigit = false; //定义一个boolean值，用来表示是否包含数字
//        boolean containsLetter = false; //定义一个boolean值，用来表示是否包含字母
//        boolean containsSpecial = false; //定义一个boolean值，用来表示是否包含特殊字符
//
//        for (int i = 0; i < password.length(); i++) {
//            //判断是否含有特殊字符
//            Matcher m = p.matcher(password);
//            if (Character.isDigit(password.charAt(i))) {
//                //用char包装类中的判断数字的方法判断每一个字符
//                containsDigit = true;
//            } else if (Character.isLetter(password.charAt(i))) {
//                //用char包装类中的判断字母的方法判断每一个字符
//                containsLetter = true;
//            } else if (m.find()) {
//                //判断是否包含特殊字符
//                containsSpecial = true;
//            }
//        }

//        String regex = "^([a-zA-Z0-9~`#$%^&*!@.,()\\\\{}|:;?<>]){6,12}$";
//        return containsDigit && containsLetter && containsSpecial && password.matches(regex);
        return password.length() >= 6 && password.length() <= 20;
    }


    /**
     * @return boolean
     * @Description 校验昵称格式：不超过10个字符
     * @Param []
     **/
    public static boolean checkNicknameFormat(String nickname) {
        if (nickname == null) {
            log.error("昵称传入为null");
            return false;
        }
        return nickname.length() <= 10 && nickname.length() > 0;
    }

    public static void main(String[] args) {
        // 长度不够判断
        String phone1 = "111";
        // 正常号码判断
        String phone2 = "13028969105";
        System.out.println("phone1:" + FormatUtils.checkPhoneNumberFormat(phone1));
        System.out.println("phone2:" + FormatUtils.checkPhoneNumberFormat(phone2));
        // 传入空字符串判断
        System.out.println("空:" + FormatUtils.checkPhoneNumberFormat(""));
        // 传入null判断
        String phone3 = null;
        System.out.println("null:" + FormatUtils.checkPhoneNumberFormat(phone3));

        // 1.正常密码判断
        String password1 = "123a@123";
        System.out.println("123a@123:" + FormatUtils.checkPasswordFormat(password1));
        // 2.长度不够判断
        String password2 = "123a@";
        System.out.println("123a@:" + FormatUtils.checkPasswordFormat(password2));
        // 2.不含特殊字符判断
        String password3 = "123a1234";
        System.out.println("123a1234:" + FormatUtils.checkPasswordFormat(password3));
        // 3.不含字母判断
        String password5 = "1234567@";
        System.out.println("1234567@:" + FormatUtils.checkPasswordFormat(password5));
        // 4.输入为空字符串判断
        System.out.println("空:" + FormatUtils.checkPasswordFormat(""));

        // 1.正常情况
        String nickname1 = "李学成a";
        System.out.println("李学成a:" + FormatUtils.checkNicknameFormat(nickname1));
        // 2.长度超过10条件判断
        String nickname2 = "李学成李学成李学成李学成";
        System.out.println("李学成李学成李学成李学成:" + FormatUtils.checkNicknameFormat(nickname2));
        // 3.传入参数为空字符串情况
        System.out.println("空:" + FormatUtils.checkNicknameFormat(""));
        // 4.传入参数为null处理
        String a = null;
        System.out.println("nickname传入参数为null:" + FormatUtils.checkNicknameFormat(a));
    }
}
